Errors
Pool
| Error Name | error code | Description | 
|---|---|---|
| Pool_BorrowAmountTooLow(uint256,address,uint256) | ec8c58d9 | Borrowed amount is lower than minimum borrow amount | 
| Pool_DebtTooLow(uint256,address,uint256) | fa33d66d | Debt is below min debt amount | 
| Pool_FeeTooHigh() | 87881b47 | Given fee value is greater than 100% | 
| Pool_InsufficientBorrowLiquidity(uint256,uint256,uint256) | bbf9dcf4 | Insufficient pool liquidity to service borrow | 
| Pool_InsufficientWithdrawLiquidity(uint256,uint256,uint256) | bfaa5c8e | Insufficient pool liquidity to service withdrawal | 
| Pool_NoRateModelUpdate(uint256) | e57d69dc | Rate model was not found in the Sentiment registry | 
| Pool_OnlyPoolOwner(uint256,address) | d2d2acbe | Function access restricted only to the pool owner | 
| Pool_OnlyPositionManager(uint256,address) | 3b0a6bb6 | Function access restricted only to Sentiment Position Manager | 
| Pool_OracleNotFound(address) | 62ece640 | No oracle found for pool asset | 
| Pool_PoolAlreadyInitialized(uint256) | e9a00b4a | Attempt to initialize an already existing pool | 
| Pool_PoolCapExceeded(uint256) | 4cdec45c | Pool deposits exceed asset cap | 
| Pool_PoolPaused(uint256) | dcb75bce | Pool is paused | 
| Pool_RateModelNotFound(bytes32) | 25947b69 | No pending rate model update for the pool | 
| Pool_TimelockExpired(uint256,uint256,uint256) | 05012df9 | Rate model timelock deadline has passed | 
| Pool_TimelockPending(uint256,uint256,uint256) | 7ec55917 | Rate model timelock delay has not been completed | 
| Pool_ZeroAddressOwner() | a258c672 | Zero address cannot be the pool owner | 
| Pool_ZeroShareRedeem(uint256,uint256) | 3fb5a6ef | Attempt to redeem zero shares worth of assets from the pool | 
| Pool_ZeroSharesBorrow(uint256,uint256) | 2a2b6de3 | Attempt to borrow zero shares worth of assets from the pool | 
| Pool_ZeroSharesDeposit(uint256,uint256) | e45eaa51 | Attempt to deposit zero shares worth of assets to the pool | 
| Pool_ZeroSharesRepay(uint256,uint256) | 4e4e9e6c | Attempt to repay zero shares worth of assets to the pool | 
Position
| Error Name | error code | Description | 
|---|---|---|
| Position_ExecFailed(address,address) | e93dfe32 | Exec operation on the position returned false | 
| Position_MaxAssetsExceeded(address) | b6acde7e | Number of assets held by the position exceeds MAX_ASSETS | 
| Position_MaxDebtPoolsExceeded(address) | f95b984b | Number of pools with active borrows exceeds MAX_DEBT_POOLS | 
| Position_OnlyPositionManager(address,address) | 02787588 | Function access restricted to Sentiment Position Manager | 
Position Manager
| Error Name | error code | Description | 
|---|---|---|
| PositionManager_AddUnknownToken(address) | 0018c19d | Attempt to add unrecognized asset to a position's asset list | 
| PositionManager_ApproveUnknownAsset(address) | e61feed6 | Attempt to approve unknown asset | 
| PositionManager_DepositUnknownAsset(address) | 20d1dc8d | Attempt to deposit unrecognized asset to position | 
| PositionManager_HealthCheckFailed(address) | 3236e202 | Position health check failed | 
| PositionManager_LiquidateHealthyPosition(address) | 1a2f48b7 | Cannot liquidate healthy position | 
| PositionManager_OnlyPositionAuthorized(address,address) | 06540d14 | Function access restricted to authorozied addresses | 
| PositionManager_OnlyPositionOwner(address,address) | 2280c1e9 | Function access restricted to position owner only | 
| PositionManager_PredictedPositionMismatch(address,address) | 9012152c | Predicted position address does not match with deployed address | 
| PositionManager_SeizeInvalidAsset(address,address) | e5b0202a | Seized asset does not belong to to the position's asset list | 
| PositionManager_TransferUnknownAsset(address) | fac1a4bf | Attempt to transfer unrecognized asset out of position | 
| PositionManager_UnknownFuncSelector(address,bytes4) | 61db8792 | Unknown target-function selector pair | 
| PositionManager_UnknownPool(uint256) | 7de7d454 | The pool a position is trying to borrow from does not exist | 
| PositionManager_UnknownSpender(address) | 7280232c | Unknown spenders cannot be granted approval to position assets | 
Risk Engine
| Error Name | error code | Description | 
|---|---|---|
| RiskEngine_CannotBorrowPoolAsset(uint256) | 2e762e16 | Pool LTV for the asset being lent out must be zero | 
| RiskEngine_LtvLimitBreached(uint256) | c3f8e7ec | Proposed LTV is outside of protocol LTV bounds | 
| RiskEngine_LtvUpdateExpired(uint256,address) | 24aad6d1 | Timelock deadline for LTV update has passed | 
| RiskEngine_LtvUpdateTimelocked(uint256,address) | 03c287a9 | Timelock delay for the pending LTV update has not been completed | 
| RiskEngine_MaxLtvTooHigh() | 2b3af9e6 | Global max ltv must be less than 100% | 
| RiskEngine_MinLtvTooLow() | e2dc5a7b | Global min ltv cannot be zero | 
| RiskEngine_NoLtvUpdate(uint256,address) | 188505a6 | There is no pending LTV update for the given Pool-Asset pair | 
| RiskEngine_NoOracleFound(address) | 03206973 | There is no oracle associated with the given asset | 
| RiskEngine_OnlyPoolOwner(uint256,address) | fa5947cd | Function access is restricted to the owner of the pool | 
Risk Module
| Error Name | error code | Description | 
|---|---|---|
| RiskModule_LiquidateHealthyPosition(address) | 181d012b | Cannot liquidate healthy positions | 
| RiskModule_NoBadDebt(address) | 58f1ee46 | Position does not have any bad debt | 
| RiskModule_SeizedTooMuch(uint256,uint256) | e1fab7c8 | Value of assets seized by the liquidator exceeds liquidation discount | 
| RiskModule_UnsupportedAsset(address,uint256,address) | 65f81bdf | Position contains an asset that is not supported by a pool that it borrows from | 
| RiskModule_ZeroMinReqAssets() | 6eda0aa4 | Minimum assets required in a position with non-zero debt cannot be zero | 
Super Pool
| Error Name | error code | Description | 
|---|---|---|
| SuperPool_FeeTooHigh() | 80ed0c2c | Fee value is greater than 100% | 
| SuperPool_InvalidQueueReorder() | 07c2a12f | Invalid queue reorder parameters | 
| SuperPool_MaxQueueLengthReached(address) | 6ffa3bf6 | Number of pools in the queue exceeds MAX_QUEUE_LENGTH | 
| SuperPool_NoFeeUpdate() | eba5da00 | No pending SuperPool fee update | 
| SuperPool_NonZeroPoolBalance(address,uint256) | 6752a1af | Attempt to remove underlying pool with non-zero deposits | 
| SuperPool_NotEnoughLiquidity(address) | 366f1c06 | Insufficient Liquidity to service withdrawal | 
| SuperPool_OnlyAllocatorOrOwner(address,address) | 20f8d4db | Function access is restricted to pool owners and allocators | 
| SuperPool_PoolAlreadyInQueue(uint256) | d163b6d3 | Attempt to add a pool already in the queue | 
| SuperPool_PoolAssetMismatch(address,uint256) | 18d7db2f | Underlying pool asset does not match Super Pool asset | 
| SuperPool_PoolNotInQueue(uint256) | 64f40e0a | Attempt to interact with a queue not in the SuperPool queue | 
| SuperPool_QueueLengthMismatch(address) | 2234ed25 | Reordered queue length does not match current queue length | 
| SuperPool_ReorderQueueLength() | a02e5f08 | Reordered queue length does not match original queue length | 
| SuperPool_SuperPoolCapReached() | 65ff1852 | Global asset cap for this SuperPool has been reached | 
| SuperPool_TimelockExpired(uint256,uint256) | bc180d84 | Superpool fee timelock deadline has passed | 
| SuperPool_TimelockPending(uint256,uint256) | 606c5dda | Superpool fee timelock delay has not been completed | 
| SuperPool_ZeroAssetMint(address,uint256) | 5918a504 | Attempt to mint zero asset worth of shares from the pool | 
| SuperPool_ZeroAssetRedeem(address,uint256) | 6e9c69fb | Attempt to withdraw zero shares worth of assets | 
| SuperPool_ZeroFeeRecipient() | f5375a33 | SuperPools with non-zero fees cannot have an address(0) fee recipient | 
| SuperPool_ZeroPoolCap(uint256) | 1c7f96f6 | Underlying pools must have non-zero pool caps | 
| SuperPool_ZeroShareDeposit(address,uint256) | 7a404523 | Attempt to deposit zero shares worth of assets to the pool | 
| SuperPool_ZeroShareWithdraw(address,uint256) | 54195064 | Attempt to withdraw zero shares worth of assets | 
Super Pool Factory
| Error Name | error code | Description | 
|---|---|---|
| SuperPoolFactory_TooFewInitialShares(uint256) | fa6f6aaa | Amount of initial shares burned is too low | 
| SuperPoolFactory_ZeroFeeRecipient() | 1f59886b | SuperPools with non-zero fees cannot have an address(0) fee recipient | 
Chainlink Oracles
| Error Name | error code | Description | 
|---|---|---|
| ChainlinkEthOracle_GracePeriodNotOver() | 7ec3cef7 | L2 Sequencer has recently recovered from downtime and is in its grace period | 
| ChainlinkEthOracle_NonPositivePrice(address) | b079f33d | Latest price update for assethas a negative value | 
| ChainlinkEthOracle_SequencerDown() | fd0643dc | L2 sequencer is experiencing downtime | 
| ChainlinkEthOracle_StalePrice(address) | 07def312 | Last price update for assetwas before the accepted stale price threshold | 
| ChainlinkUsdOracle_GracePeriodNotOver() | f30bbf0d | Last price update for assetwas before the accepted stale price threshold | 
| ChainlinkUsdOracle_NonPositivePrice(address) | 12748980 | Latest price update for assethas a negative value | 
| ChainlinkUsdOracle_SequencerDown() | c03e4c05 | L2 sequencer is experiencing downtime | 
| ChainlinkUsdOracle_StalePrice(address) | e7cbfb51 | Last price update for assetwas before the accepted stale price threshold |